/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cooperativa.proceso;

import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.cooperativa.dao.SocioFacade;
import org.cooperativa.dao.TarifaFacade;
import org.cooperativa.entities.Socio;
import org.cooperativa.entities.Unidad;

/**
 *
 * @author giovanny
 */
@Named(value = "ejb1")
@SessionScoped
public class Ejb1 implements Serializable {

    @Inject
    TarifaFacade tarifaFacade;
    @Inject
    SocioFacade socioFacade;
    

    /**
     * Creates a new instance of Ejb1
     */
    public Ejb1() {
    }
    
    /***El siguiente metodo sirve para verificar que el socio esta registrado***/
    public Socio buscarSocioPorCodigoProceso(String codigo) {
        Socio socio;
        List<Unidad> listaUnidades;
        float tarfiaVigente;

        try {

            socio = socioFacade.buscarSocioPorCodigoDao(codigo);

            listaUnidades = recuperarListaUnidadesSocio(socio);//socio.getUnidadList();

            //Se llamara al metodo que recupera la tarifa vigente (este se usara 
            //solo en el caso de que el socio no tenga atrasos en sus pagos), ya que
            //existira el caso en el que tenga atrasos y las tarifas en esos periodos sean distintos
            //tarfiaVigente = tarifaFacade.obtenerTarifaVigente();

            return socio;
        } catch (Exception e) {

            return null;
        }
    }
    
    /***El siguiente metodo sirve para obtener el total a pagar por parte del socio,
        en el caso que el socio no se ha atrasado en sus pagos**/
    public float calcularTotalPagar(String codigo, int meses) {
        Socio socio;
        List<Unidad> listaUnidades;
        float tarfiaAportacion, tarifaSocial, totalPagar = 0;

        try {

            socio = socioFacade.buscarSocioPorCodigoDao(codigo);

            listaUnidades = recuperarListaUnidadesSocio(socio);//socio.getUnidadList();

            //Se llamara al metodo que recupera la tarifa vigente (este se usara 
            //solo en el caso de que el socio no tenga atrasos en sus pagos), ya que
            //existira el caso en el que tenga atrasos y las tarifas en esos periodos sean distintos
            tarfiaAportacion = tarifaFacade.obtenerTarifaAportacion();
            tarifaSocial = tarifaFacade.obtenerTarifaSocial();

            totalPagar = (tarfiaAportacion*listaUnidades.size() + tarifaSocial)*meses;
            
            return totalPagar;
        } catch (Exception e) {

            return 0;
        }
    }
    
    //Este metodo permite recuperar el listados de unidades del socio, que 
    //tenga el estado como activo
    public List<Unidad> recuperarListaUnidadesSocio(Socio s){
        
        List<Unidad> listOriginal, listFiltrada = null;
        listOriginal = s.getUnidadList();
        
        for (Unidad unidad : listOriginal) {
           if(unidad.getActivo()){ //Si la unidad esta activa se agrega a la lista
               listFiltrada.add(unidad);
            }
        
        }
        
    return listFiltrada;
    }
    
}
